
/**
 * 在使用XMLHttpRequest对象进行异步传输的时候，由于有缓存的存在，有可能使你的下次的请求是从缓存里读取的，一种方法是我经常用的，就是在请求页面上再加个参数，传递当前的时间，这样，服务器才会把每次请求当作新的请求，总结了下，有以下三种方法实现：
 * 第一种，例如：url="default.aspx?id="+id+"&dt="+new Date().getTime()
 * 第二种，例如：url="default.aspx?id="+id+"&dt="+Math.random()
 * 第三种，例如：xmlhttp.setRequestHeader("Cache-Control","no-cache") 
 */
function HttpController(method,resultFun) {
	this.method = method; // get or post方式
	this.method = "get";
	
	this.resultFun = resultFun;//服务端返回数据后调用的方法
	
	this.async = false;//同步或异步方式
	
	this.parameter = new Map();
	
	if(window.ActiveXObject){
		this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else if(window.XMLHttpRequest){
		this.xmlHttp = new XMLHttpRequest();
	}
	
	this.doAfter = null;
}

HttpController.prototype = {
	//增加参数
	addParameter:function(key,value) {
		this.parameter.put(key,value);
	},
	//设置模块名称
	setModuleName:function(moduleName){
		this.addParameter("moduleName", moduleName);
	},
	//设置操作名称
	setOperateName:function(operateName) {
		this.addParameter("operateName", operateName);
	},
	//设置json的值,即后台方法的参数值
	setJson:function(obj) {
		//this.addParameter("json",obj.toJSONString());//json.js中的解析方法(json.js与ext.js有冲突)
	},
	setDoAfter:function(doAfter,parameter) {
		this.doAfter = doAfter(parameter);
	},
	executeHttp:function(url,doAfter){
		url += "&rnd="+(new Date());//在url里加一个随机数，相当于清除缓存
		var keySet = this.parameter.keySet;
		//alert("len = " + keySet.length);
		for(var index = 0;index<keySet.length;index++){
			var key = keySet[index];
			var value = encodeURIComponent(this.parameter.get(key));
			//alert("key = " + key + " , value = " + value);
			url += "&" + key + "=" + value;
		}
		//alert(this.url);
		this.xmlHttp.open(this.method,url,this.async);//打开连接

		var thisObj = this;
		var xmlHttp = this.xmlHttp;
		xmlHttp.onreadystatechange = function(){
			if(xmlHttp.readyState==4){
		    	if(xmlHttp.status==200){
		    		var result = xmlHttp.responseText;//服务器返回的信息
		    		//alert("result = " + result);
		    		try{
		    			doAfter(result);
		    			//thisObj.resultFun(result);
		    			if(this.doAfter != null) {
		    				thisObj.doAfter();
		    			}
		    			//eval(responseMethod+"(result)");
		    		}catch(e){
		    			//alert("没有方法:" + responseMethod + "(result)");
		    		}
		    	}
	 		}
		};
		xmlHttp.send();
		
		xmlHttp = null;
		this.xmlHttp = null;
		this.parameter = null;
	}
}

